/**
 * @author pedro
 */

//Definimos variables globales
var sCondicionIva = "{0:'Inscripto',1: 'No Inscripto',2:'Exento',3: 'Monotributo',4: 'Consumidor Final',5: 'No Categorizado'}";
var oCondicionIva = {0:'Inscripto',1: 'No Inscripto',2: 'Exento', 3: 'Monotributo',4: 'Consumidor Final',5: 'No Categorizado'};


//Definimos el titulo de alguno de nuestros campos
oTitulos = {
							codigo: 'Código', 
							nombre: 'Cliente', 
							condicion_iva: 'Condición IVA', 
							cuit: 'CUIT', direccion: 'Dirección', 
							localidad_id: 'Localidad',
							telefono_1: 'Telefono',
							interno: 'Interno',
							celular: 'Celular',
							fax: 'Fax',
							pagina_web: 'Pagina Web',
							mail: 'Mail',
							descripcion: 'Descripción'
						};




/*
 Listado de columnas
 id
 nombre
 condicion_iva
 direccion
 mail
 */
jQuery(document).ready(function(){
    __init__();
    jQuery('#info-box').tabs({
        fxSlide: true,
        fxFade: true,
        fxSpeed: 'fast'
    });
});



/*******Listado de funciones************/
//Funcion que oculta una columna del grid
function ocultarCol(){
    oTabla.hideCol('nombre');
}

//limpiamos el cuadro de busqueda
function clearSearch(){
    jQuery('#txt-search').attr('value', '');
    getClientes('');
}

//funcion que pone las mascara dependiendo del id que se le pasa
function putMask(sIdObject){
    switch (sIdObject) {
        case "info-cuit":
            oObject = jQuery("#" + sIdObject + " form");
            oObject.find("input").addClass("inputs requerido validar-cuit")
            console.log(oObject);
            oObject.validate();
            //console.log('Hola cuit')
            break;
            
            
        /*jQuery("#dni").mask("99.999.999");
        
         jQuery("#fecha_inicio").mask("99-99-9999");
        
         */
        
    }
    
}

//Funcion que devuelve una lista de clientes en formato JSON
function getClientes(sKey){
    jQuery.ajax({
        url: "Clientes/getClientes/" + sKey,
        success: function(msg){
            mydata = readJSON(msg);
            //primero limpiamos el grid..ver de hacerlo de otra manera...
            oGrid = jQuery("#list");
            clearGrid(oGrid);
            for (var i = 0; i <= mydata.length; i++) 
                oGrid.addRowData(i + 1, mydata[i]);
        }
    });
}

//Funcion que devuelve una lista de las personas responsable en formato JSON
function getResponsables(iId, oObjeto){
    jQuery.ajax({
        url: "Clientes/getResponsable/" + iId,
        success: function(msg){
            mydata = readJSON(msg);
            //Antes de agregar cualquier cosa limpiamos el contenedor
            oObjeto.html('');
            for (var i = 0; i <= mydata.length; i++) {
                oObjeto.append('<p style="padding-left:8px"> ' + mydata[i].responsable + '</p>');
            }
        }
    });
}

//Funcion que devuelve una lista de las personas autorizadas en formato JSON
function getAutorizados(iId, oObjeto){
    jQuery.ajax({
        url: "Clientes/getAutorizados/" + iId,
        success: function(msg){
            setTimeout('setFacebox()', 1000);
        },
        complete: function(msg){
            mydata = readJSON(msg.responseText);
            //Antes de agregar cualquier cosa limpiamos el contenedor
            oObjeto.html('');
						oObjeto.append('<a id="open-box" style="display:none" href="#info-facebox" rel="facebox">Open Box</a>');
            oObjeto.append('<a id="add-autorizados" href="javascript://" onclick="editAutorizados(' + iId + ', 0)">Agregar autorizados</a><br />');
            for (var i = 0; i <= mydata.length; i++) {
                oObjeto.append('<br />');
                sHtml = '<div id="autorizado_' + mydata[i].id_encargado + '">';
                sHtml += '<span style="padding-left:8px">' + mydata[i].apellido + ", " + mydata[i].nombre + '</span>';
                sHtml += '<span style="padding-left:8px"><a href="javascript://" onclick="editAutorizados(' + iId + ', ' + mydata[i].id_encargado + ')">Editar</a></span>';
                sHtml += '<span style="padding-left:8px"><a href="javascript://" onclick="deleteAutorizados(' + mydata[i].id_encargado + ')">Remove</a></span><br />';
                sHtml += '</div>';
                oObjeto.append(sHtml);
            }
        }
        
    });
}

function setFacebox(){
    jQuery('a[rel*=facebox]').facebox();
}


function editAutorizados(iIdCliente, iIdAutorizado)
{
		//cargamos el lightbox
		jQuery('#open-box').trigger('click');
		
		
		//Limpiamos el formulario
		clearForm('#info-facebox_instance');
		
		oForm = jQuery(('#info-facebox_instance'));
	
    //Agregamos los valores de los campos hidden
    oForm.find('.id_cliente_box').val(iIdCliente);
    oForm.find('.id_persona_box').val(iIdAutorizado);
    
    //Rellenamos el campo de nombre
		if(iIdAutorizado!=0)
		{
			//Ponemos la descripción de lo que hace este lightbox
			oForm.find('.help-box p').html('Modifique los campos para <strong>editar</strong> la información de una persona autorizada');
			sNombreyApe = jQuery('#autorizado_' + iIdAutorizado + ' span:eq(0)').html();
	    aNombres = sNombreyApe.split(',');
	    sApellido = aNombres[0];
	    sNombre = jQuery.trim(aNombres[1]);
	    oForm.find('.apellido_persona').val(sApellido);
	    oForm.find('.nombre_persona').val(sNombre);
			oForm.find('.button-submit_cliente_box').html('Editar');
		}else
		{
			//Ponemos la descripción de lo que hace este lightbox
			oForm.find('.help-box p').html('Rellene los campos para <strong>agregar</strong> información de un nuevo autorizado');
			oForm.find('.button-submit_cliente_box').html('Agregar');
			//Limpiamos el formulario
			//setTimeout("clearForm('#info-facebox_instance')", 300);
		}
}

function doFocus(sId)
{
	sId = jQuery(sId).attr('rel');
	sId = '#info-facebox_instance ' + sId;
	jQuery(sId).focus();
	doHighLight(sId)
}

function doHighLight(sId)
{
	jQuery(sId).css({'background-color':'red'});
	setTimeout("outHighLight('" + sId + "')", 1000);
}

function outHighLight(sId)
{
	jQuery(sId).css({'background-color':'white'});
}


function saveAutorizados(){
	
		oForm = jQuery('#info-facebox_instance');
	
	
    iIdCliente = oForm.find('.id_cliente_box').val();
    
    iId = oForm.find('.id_persona_box').val();
		
    sData = readForm('#info-facebox_instance');
		
    //funcion que guarda un nuevo autorizado
    //tanto la funcion para guardar como para editar
    //son las mismas salvo q en el primer caso el id_cliente es = 1 VERIFICAR
    
    jQuery.ajax({
        url: "Personas/modificarPersonaJson/" + iId,
        dataType: "json",
        type: "POST",
        data: sData,
        success: function(msg)
				{
            if (msg.estado) 
						{
                showInfoTop(msg.mensaje);
                jQuery('.close').click();
                setTimeout('refreshAutorizados()', 1000);
            }else
						{
							showErrorTop(msg.errores);
						}
        }
    });
}

function refreshAutorizados(){
    jQuery('#btn-tab-responsable').click();
}

function eliminarAutorizado(iIdAutorizado){
    //console.log(jQuery('#id_cliente_box').val());
    //funcion que elimina un usuario
    jQuery.ajax({
        url: "Clientes/getResponsable/" + iId,
        dataType: "json",
        data: sData,
        success: function(msg){
            //Se Elimino correctamente  
        },
    });
}

//Funcion que lee las variables de un formularios y las pone a todas en un array
function readForm(sIdForm){
    //Primero traemos todos los inputs del formulario, sobre todos los de campo hidden, los text y los passwords
    return jQuery(sIdForm + ' input:text, ' + sIdForm + ' input:hidden, ' + sIdForm + ' input:password').serialize()
}

//Funcion que limpia el form
function clearForm(sIdForm){
		//Primero traemos todos los inputs del formulario, sobre todos los de campo hidden, los text y los passwords
    jQuery(sIdForm + ' input:text, ' + sIdForm + ' input:hidden, ' + sIdForm + ' input:password').val('');
}


//Nos devuelve el valor del campo de busqueda
function getValueSearch(){
    sSearchValue = jQuery('#txt-search').attr('value');
    if (sSearchValue) 
        return sSearchValue;
    return '';
}

//funcion que nos hace un resaltado de las palabras encontradas
function getHighLight(){
    oRenglones = jQuery('#list tbody > tr').find('td:eq(1)').each(function(){
        sAux = jQuery(this).html();
        sAuxFind = getValueSearch()
        iCont = 0;
        for (var i = 0; i < sAuxFind.length; i++) {
            if (sAux.charAt(i).toLowerCase() == sAuxFind.charAt(i).toLowerCase()) {
                iCont++;
            }
        }
        if (iCont != 0) {
            sHighLight = '<span class="highlight-search">' + sAux.substring(0, iCont) + '</span>';
            sNewText = sHighLight + sAux.substring(iCont, sAux.length);
            jQuery(this).html(sNewText);
        }
    });
}



//Muestra el cuadro de información pasandole como parametro un msj a mostrar.
function showInfoTop(sMsj){
    oContMje = jQuery('#info-top');
		oContMje.attr('class','info-top-sucess');
    oContMje.find('p').html(sMsj);
    oContMje.slideDown('medium', function()
		{
        setTimeout("ocultarInfo()", 3000);
    })
}

//Muestra el cuadro de error pasandole como parametro un msj a mostrar.
function showErrorTop(aMsjError)
{
    oContMje = jQuery('#info-top');
		
		//Creamos el html
		sMsj = '';
		for (x in aMsjError)
		{
			sMsj += aMsjError[x] + '<br />';
		}
		
		oContMje.find('p').html(sMsj);
		
		if(oContMje.attr('class')!='info-top-error')
		{
			oContMje.attr('class', 'info-top-error');
    
	    oContMje.slideDown('medium')
			if(jQuery('#ocultar-error').length==0)
			{
				oContMje.append('<a id="ocultar-error" href="javascript://" onclick="ocultarInfoError()">Ocultar</a>');	
			}
		}
		
}

//Oculta el cuadro de información
function ocultarInfo(){
    jQuery('#info-top').hide();
		jQuery('#info-top').attr('class','');
}

//Oculta el cuadro de error
function ocultarInfoError(){
		
    jQuery('#info-top').slideUp('slow', function()
		{
			//Eliminamos el boton de ocultar
			jQuery('#ocultar-error').remove();
		});
}

//Funcion que limpia la grilla
function clearGrid(oGrid){
    iCant = oGrid.getRecords();
    for (var i = 1; i <= iCant; i++) {
        while (oGrid.delRowData(i)) {
            continue;
        }
    }
}

function getFilaSelected(){
    return jQuery('#list').getSelectedRow();
}

//Funcion que leer un JSON y lo carga en el grid
function readJSON(msg){
    //console.log(msg); 
    mydata = msg;
    mydata = mydata.split('<!--');
    mydata = mydata[0];
    //hacemos la conversion de string2json
    mydata = eval(mydata);
    return mydata;
}


//Funcion que crea el grid
function crearGrid(){
    jQuery("#list").jqGrid({
        url: 'editing.php?q=1',
        datatype: 'local',
        height: 290,
        width: 580,
        colNames: ['id', 'codigo', 'nombre', 'condicion_iva', 'cuit', 'direccion', 'localidad_id', 'telefono_1', 'interno', 'celular', 'fax', 'mail', 'pagina_web', 'descripcion'],
        colModel: [{
            name: 'id_cliente',
            index: 'id_cliente',
            width: 20,
            hidden: true,
            editable: true,
            editoptions: {
                readonly: true,
                size: 10
            }
        }, {
            name: 'codigo',
            index: 'codigo',
            width: 180,
            editable: true,
            editoptions: {
                size: 60
            },
            hidden: true
        }, {
            name: 'nombre',
            index: 'nombre',
            width: 180,
            editable: true,
            editoptions: {
                size: 60
            },
            hidden: false
        }, {
            name: 'condicion_iva',
            index: 'condicion_iva',
            hidden: true,
            width: 90,
            editable: true,
            edittype: "select",
        }, {
            name: 'cuit',
            index: 'cuit',
            width: 180,
            editable: true,
            editoptions: {
                size: 60
            },
            hidden: true
        }, {
            name: 'direccion',
            index: 'direccion',
            width: 180,
            editable: true,
            editoptions: {
                size: 30
            },
            hidden: true
        }, {
            name: 'localidad_id',
            index: 'localidad_id',
            width: 180,
            editable: true,
            editoptions: {
                size: 30
            },
            hidden: true
        }, {
            name: 'telefono_1',
            index: 'telefono_1',
            width: 180,
            editable: true,
            editoptions: {
                size: 30
            },
            hidden: true
        }, {
            name: 'interno',
            index: 'interno',
            width: 180,
            editable: true,
            editoptions: {
                size: 30
            },
            hidden: true
        }, {
            name: 'celular',
            index: 'celular',
            width: 180,
            editable: true,
            editoptions: {
                size: 30
            },
            hidden: true
        }, {
            name: 'fax',
            index: 'fax',
            width: 180,
            editable: true,
            editoptions: {
                size: 30
            },
            hidden: true
        }, {
            name: 'pagina_web',
            index: 'pagina_web',
            width: 180,
            editable: true,
            editoptions: {
                size: 30
            },
            hidden: true
        }, {
            name: 'descripcion',
            index: 'descripcion',
            width: 180,
            editable: true,
            editoptions: {
                size: 30
            },
            hidden: true
        }, {
            name: 'mail',
            index: 'mail',
            width: 180,
            editable: true,
            editoptions: {
                size: 40
            }
        }],
        caption: "Clientes",
        editurl: 'clientes/editar',
    });//fin del grid
}



/*Funcion que inicializa la pagina*/
function __init__(){
    //Asignamos la tabla a una variable
    var oTabla = jQuery("#list");
    
    /*****Hacemos un binding de los siguientes eventos***/
    
    //Eliminamos la clase que sugiere que realicemos una busqueda
    //jQuery('#txt-search').click(function(){jQuery('#txt-search').attr('value', '').removeClass()});
    
    
    //Limpiamos el search box
    jQuery('#txt-search').attr('value', '').addClass('legend-text');
    
    //generamos los eventos del keyup que son los que se lanzan cada vez que presionamos una tecla
    jQuery("#txt-search").keyup(function(){
        sValor = this.value;
        iRowCount = (jQuery('#list >tbody > tr').length) - 1;
        if (sValor == '') {
            //jQuery(this).attr('value', '').addClass('legend-text');
            getClientes('');
        }
        else {
            jQuery(this).removeClass();
            getClientes(this.value);
            setTimeout("getHighLight()", 400);
        }
    });
		
		//cargamos los datos del 3 tab que contiene a los responsables
    oBtnTabResponsable = jQuery('#btn-tab-responsable');
		
		//Definimos el evento del click 
		oBtnTabResponsable.bind('click', function()
		{
			var iCliente = getFilaSelected();
			if (iCliente != null) 
			{
		  	jQuery('#tab-responsable').html('');
		  	oTabResponsable.append("<div id='list-responsables'><strong>Responsable/s:</strong><div></div></div>");
		  	getResponsables(iCliente, jQuery('#list-responsables > div:eq(0)'));
	  	
		  	//cargamos a los autorizados
				oTabResponsable.append("<div id='list-autorizados'><strong>Autorizados/s:</strong><div></div></div>");
				getAutorizados(iCliente, jQuery('#list-autorizados > div:eq(0)'));
			}
		});
    
		
    oTabla.dblclick(function(){
        var iCliente = getFilaSelected();
        if (iCliente != null) {
            oRenglon = oGrid.getRowData(iCliente);
            //limpiamos el contenido del tab
            oTabInfo = jQuery('#tab-info');
            //oTabContacto = jQuery('#tab-contacto');
            oTabInfo.html('');
            //oTabContacto.html('');
            //bTabContacto = false;
            
            for (sData in oRenglon) 
						{
                sEstilo = 'edit';
                if (sData == 'condicion_iva') 
								{
                    sEstilo = 'edit-select';
                }
                //oTabInfo.append('<p><strong>' + sData + ':</strong> ' + oRenglon[sData] + '</p>');
								eReg = /(^\s)/;
								sFiltro = eReg.test(oRenglon[sData]);
								
								if (sData != 'id_cliente' && !sFiltro)
								{
                    oTabInfo.append('<div class="info-title">' + oTitulos[sData] + ':</div><div id="info-' + sData + '" class="' + sEstilo + '">' + oRenglon[sData] + '</div><div class="clean"></div>');
                }
            }
						
            jQuery(".edit").editable("clientes/editar/" + oRenglon['id_cliente'], {
                cssclass: "edit-inline",
                width: 106,
                height: 16,
                indicator: "Guardando...",
                tooltip: 'Click para editar...',
                placeholder: "Agregar un valor...",
                submit: 'Guardar',
                style: "display: inline",
                callback: function(){
                    getClientes('');
                    showInfoTop('Se ha editado correctamente');
                }
            });
            //esto lo hacemos para probar despeus arreglar
            jQuery(".edit-select").editable("clientes/editar/" + oRenglon['id_cliente'], {
                //data   :" {'E':'Letter E','F':'Letter F','G':'Letter G', 'selected':'F'}",
                data: sCondicionIva,
                type: "select",
                cssclass: "edit-inline",
                width: 190,
                height: 16,
                indicator: "Guardando...",
                tooltip: 'Click para editar...',
                submit: 'Guardar',
								select: true,
                style: "display: inline",
                placeholder: "Agregar un valor...",
                callback: function(){
                    getClientes('');
										jQuery('#info-condicion_iva').html(oCondicionIva[jQuery('#info-condicion_iva').html()]);
										showInfoTop('Se ha editado correctamente');
                }
            });
            
            jQuery("#tab-info div").click(function(){
                putMask(jQuery(this).attr('id'))
            });
            
            oTabResponsable = jQuery('#tab-responsable');
						
						jQuery('#info-condicion_iva').html(oCondicionIva[jQuery('#info-condicion_iva').html()]);
        }
    });
    
    
    //Evento que abre el cuadro de edición
    iCont = 0;
    /*oTabla.bind('dblclick', function(){
     var gr = oTabla.getSelectedRow();
     if( gr != null ) {
     oEdit = oTabla.editGridRow(gr,{
     height: 200,
     width: 500,
     closeAfterEdit : true,
     /*afterSubmit: function(x){console.log(readJSON(x.responseText))}
     }
     );
     //Evento que que se activa cuando se da a submit en el cuadro de edición
     //Cierra el cuadro de edicion
     //jQuery('#sData').bind('click', function(){jQuery('#editmodlist').hide('slow');});
     
     //mostramos que el cliente se haya editado correctamente...ver bien esto despues.
     sMensajeStatus = 'El usuario se ha editado correctamente';
     
     /*Si es la primara vez q entramos definimos los eventos
     if(iCont==0)
     {
     //mantiene el filtro de la ultima buusqueda
     jQuery('#sData').bind('click', function(){getClientes(getValueSearch())});
     jQuery('#sData').bind('click', function(){showInfoTop(sMensajeStatus)});
     iCont++;
     }
     
     }
     else alert("Por favor seleccione una fila.");
     });*/
    /**************Fin de los eventos****************/
    
    //Creamos el grid
    crearGrid();
    
    //Ponemos el cuadro de busqueda en el submenu	
    //jQuery('#submenu').append(jQuery('#search-box').show(1800));
    
    getClientes('');
} //__init__s
